﻿#include <iostream>
using namespace std;
#include <vector>
#include<algorithm>
#include<string>

//template<class T>
//struct Add
//{
//	T operator()(const T& left, const T& right)
//	{
//		return left + right;
//	}
//};
//
//
////模板的特化
//
////全特化
//template<>
//struct Add<double>
//{
//	double operator()(const double& left, const double& right)
//	{
//		return left + right;
//	}
//};
//
////半特化(偏特化)
//template<class T>
//struct Add<T*>
//{
//	T operator()(const T* left, const T* right)
//	{
//		return *left + *right;
//	}
//};
//
//
////在本文件中写模板即可
//template<class T>
//void SUB(T num)
//{
//	cout << num << endl;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 15;
//	cout << Add<int*>()(&a, &b) << endl;
//
//	SUB(5); //模板声明与定义分离会导致链接错误
//	SUB(5.5);
//	SUB('a');
//
//
//
//	return 0;
//}

//倒置字符串 - 牛客
//int main()
//{
//	string s;
//	getline(cin, s);
//	string tmp;
//	for (int i = s.size()-1; i >=0 ; --i)
//	{
//		if (s[i] == ' ')
//		{
//			int j = i+1;
//			while (s[j] != ' ' && j < s.size())
//			{
//				tmp.push_back(s[j]);
//				++j;
//			}
//			tmp.push_back(' ');
//		}
//	}
//	for (int i = 0; s[i] != ' '; ++i)
//	{
//		tmp.push_back(s[i]);
//	}
//	cout << tmp << endl;
//}

//排序子序列
//https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471
//int main()
//{
//	int n = 0;
//	cin >> n;
//	vector<int> a;
//	a.reserve(n);
//	int num = 0;
//	for (int i = 0; i < n; ++i)
//	{
//		cin >> num;
//		a.push_back(num);
//	}
//	int ret = 0;
//	for (int i = 0; i < a.size(); ++i)
//	{
//		if (a[i] > a[i + 1])
//		{
//			++ret;
//			while (i < a.size() - 1 && a[i] >= a[i + 1])
//			{
//				++i;
//			}
//		}
//		else if (a[i] < a[i + 1])
//		{
//			++ret;
//			while (i < a.size() - 1 && a[i] <= a[i + 1])
//			{
//				++i;
//			}
//		}
//	}
//	cout << ret << endl;
//	return 0;
//}

